package com.eighteengray.imageprocesslibrary.bitmapfilter;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
public class ColorBitmapFilter
{
private Bitmap mBitmap;
public ColorBitmapFilter(Bitmap bmp)
{
mBitmap = bmp;
}
private ColorMatrix mSaturationMatrix;
private ColorMatrix mHueMatrix;
private ColorMatrix mLumMatrix;
private ColorMatrix mAllMatrix;
private float mSaturationValue = 0F;
private float mHueValue = 0F;
private float mLumValue = 0F;
private static final int MIDDLE_VALUE = 127;
private static final int MAX_VALUE = 255;
public void setSaturation(int value)
{
mSaturationValue = value * 1.0F / MIDDLE_VALUE;
}
public void SetHue(int value)
{
mHueValue = (value - MIDDLE_VALUE) * 1.0F / MIDDLE_VALUE * 180;
}
public void SetLum(int value)
{
mLumValue = value * 1.0F / MIDDLE_VALUE;
}
public Bitmap process(Bitmap bmp, int flag)
{
Bitmap bitmap = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setAntiAlias(true);
if (mAllMatrix == null)
{
mAllMatrix = new ColorMatrix();
}
if (mSaturationMatrix == null)
{
mSaturationMatrix = new ColorMatrix();
}
if (mHueMatrix == null)
{
mHueMatrix = new ColorMatrix();
}
if (mLumMatrix == null)
{
mLumMatrix = new ColorMatrix();
}
if (flag == 0)
{
mSaturationMatrix.reset();
mSaturationMatrix.setSaturation(mSaturationValue);
} else if (flag == 1)
{
mHueMatrix.reset();
mHueMatrix.setRotate(0, mHueValue);
mHueMatrix.setRotate(1, mHueValue);
mHueMatrix.setRotate(2, mHueValue);
} else if (flag == 2)
{
mLumMatrix.reset();
mLumMatrix.setScale(mLumValue, mLumValue, mLumValue, 1);
}
mAllMatrix.reset();
mAllMatrix.postConcat(mHueMatrix);
mAllMatrix.postConcat(mSaturationMatrix);
mAllMatrix.postConcat(mLumMatrix);
paint.setColorFilter(new ColorMatrixColorFilter(mAllMatrix));
canvas.drawBitmap(bmp, 0, 0, paint);
return bitmap;
}
}